//
// Created by Administrator on 5/18/2024.
//

#ifndef NRF24L01_H
#define NRF24L01_H
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include "nrf24l01_config.h"

/* 定义发送/接收地址大小 */
#define TX_ADDR_SIZE    (5)
#define RX_ADDR_SIZE    (5)

/* 定义发送/接收缓冲区的大小 */
#define TX_BUFF_SIZE    (32)
#define RX_BUFF_SIZE    (32)

/* NRF24L01状态寄存器位定义 */
typedef enum {
    STATUS_RX_DR         = 0x01, // 接收数据就绪
    STATUS_TX_DS         = 0x02, // 发送数据成功
    STATUS_MAX_RT        = 0x04, // 达到最大重试次数
    STATUS_TX_FULL       = 0x01, //FIFO寄存器满标志
    STATUS_RX_P_NO       = 0x0E, //接收数据通道号
} StatusRegBits;

// 定义 NRF24L01 STATUS 寄存器的枚举
typedef enum {
    STATUS_RX_P_NO_MASK     = 0x07,    // RX_P_NO 位掩码
    STATUS_RX_P_NO_0        = 0x00,    // 数据在通道0
    STATUS_RX_P_NO_1        = 0x01,    // 数据在通道1
    STATUS_RX_P_NO_2        = 0x02,    // 数据在通道2
    STATUS_RX_P_NO_3        = 0x03,    // 数据在通道3
    STATUS_RX_P_NO_4        = 0x04,    // 数据在通道4
    STATUS_RX_P_NO_5        = 0x05,    // 数据在通道5
} StatusRegRxPipe;

/* NRF24L01设备结构体 */
typedef struct NRF24L01_DEV {

    uint8_t txAddr[TX_ADDR_SIZE];
    uint8_t rxAddr[RX_ADDR_SIZE];
    uint8_t txBuff[TX_BUFF_SIZE];
    uint8_t rxBuff[RX_BUFF_SIZE];
}nrf24l01Dev_t;

bool isConnected();
void nrf24l01Initialize(nrf24l01Dev_t *pDevice);
void nrf24l01Send(nrf24l01Dev_t *pDevice);
void nrf24l01Receive(nrf24l01Dev_t *pDevice);

#endif //NRF24L01_H
